home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Code Resources / Ingis WDEF 1.3 / IngisWDEFUtils.p < prev   
Text File  |  1996-11-18  |  9KB  |  330 lines

  1. { *** Unility unit for the "IngisWDEF" WDEF building package *** }
  2.  
  3. {© 1994-1995 by Ingemar Ragnemalm}
  4. {You may use it freely as long as credits are given in the final program.}
  5.  
  6.  
  7. unit IngisWDEFUtils;
  8.  
  9. interface
  10. {$IFC UNDEFINED THINK_PASCAL}
  11.     uses Types, QuickDraw, ToolUtils, OSUtils;
  12. {$ENDC}
  13.  
  14.  
  15. {Color save and restore}
  16.     function HasCQDraw: Boolean;
  17.     procedure SaveColors (var saveForeColor, saveBackColor: RGBColor);
  18.     procedure RestoreColors (saveForeColor, saveBackColor: RGBColor);
  19.     procedure DefaultColors;
  20. {Standard colors. For perfect results, you should check out Technote TB33, but I didn't have}
  21. {THAT much energy.}
  22.     function BoxFillColor: RGBColor;
  23.     function BoxFrameColor: RGBColor;
  24.     function BoxShadowColor: RGBColor;
  25.     function SurroundColor: RGBColor;
  26.     function DraglineColor: RGBColor;
  27. {Standard drawings, to conform with standard windows}
  28.     procedure DrawStdCloseHit (rclose: Rect);
  29.     procedure StdFrameBox (closeBox: Rect; colorFlag: Boolean);
  30.     procedure StdCloseBox (closeBox: Rect; colorFlag: Boolean);
  31.     procedure StdZoomBox (closeBox: Rect; colorFlag: Boolean);
  32.     procedure StdDragIcon (where: Point; colorFlag: Boolean);
  33.  
  34. implementation
  35.  
  36. {*****************************************************************************}
  37. {Some color stuff, for saving and restoring the foreground and background colors}
  38. {Called only when we run in color!}
  39.  
  40.     function HasCQDraw: Boolean;
  41.         var
  42.             theWorld: SysEnvRec;
  43.     begin
  44.         HasCQDraw := GetToolTrapAddress($AA1E) <> GetToolTrapAddress($A89F);{_Unimplemented}
  45.  
  46. (*        HasCQDraw := false;
  47.         if SysEnvirons(1, theWorld) = noErr then
  48.             HasCQDraw := theWorld.hasColorQD;*)
  49.     end;
  50.  
  51.     procedure SaveColors (var saveForeColor, saveBackColor: RGBColor);
  52.     begin
  53.         if not HasCQDraw then
  54.             exit(SaveColors);
  55.         GetForeColor(saveForeColor);
  56.         GetBackColor(saveBackColor);
  57.         DefaultColors;
  58.     end;
  59.  
  60.     procedure RestoreColors (saveForeColor, saveBackColor: RGBColor);
  61.     begin
  62.         if not HasCQDraw then
  63.             exit(RestoreColors);
  64.         RGBForeColor(saveForeColor);
  65.         RGBBackColor(saveBackColor);
  66.     end;
  67.  
  68.     procedure DefaultColors;
  69.         var
  70.             tmpCol: RGBColor;
  71.     begin
  72.         if not HasCQDraw then
  73.             exit(DefaultColors);
  74. {Foreground black}
  75.         tmpCol.red := 0;
  76.         tmpCol.green := 0;
  77.         tmpCol.blue := 0;
  78.         RGBForeColor(tmpCol);
  79. {Background white}
  80.         tmpCol.red := -1;
  81.         tmpCol.green := -1;
  82.         tmpCol.blue := -1;
  83.         RGBBackColor(tmpCol);
  84.     end;
  85.  
  86. {Standard bluish colors.}
  87.     function BoxFillColor: RGBColor;
  88.     begin
  89.         BoxFillColor.red := 43690;
  90.         BoxFillColor.green := 43690;
  91.         BoxFillColor.blue := 43690;
  92.     end;
  93.     function BoxFrameColor: RGBColor;
  94.     begin
  95.         BoxFrameColor.red := 52428;
  96.         BoxFrameColor.green := 52428;
  97.         BoxFrameColor.blue := 65535; {=-1=$ffff}
  98.     end;
  99.     function BoxShadowColor: RGBColor;
  100.     begin
  101.         BoxShadowColor.red := 13107;
  102.         BoxShadowColor.green := 13107;
  103.         BoxShadowColor.blue := 26214;
  104.     end;
  105.     function SurroundColor: RGBColor;
  106.     begin
  107.         SurroundColor.red := 61166;
  108.         SurroundColor.green := 61166;
  109.         SurroundColor.blue := 61166;
  110.     end;
  111.     function DraglineColor: RGBColor;
  112.     begin
  113.         DraglineColor.red := 30583;
  114.         DraglineColor.green := 30583;
  115.         DraglineColor.blue := 30583;
  116.     end;
  117. {--------}
  118.  
  119. {Draws the standard "hit" icon. Looks best in the standard size.}
  120. {Set colors before calling it, if color is desired (i.e. possible)}
  121.     procedure DrawStdCloseHit (rclose: Rect);
  122.     begin
  123.         EraseRect(rclose);
  124.         FrameRect(rclose);
  125.         MoveTo(rclose.left + 2, rclose.top + 2);
  126.         LineTo(rclose.right - 3, rclose.bottom - 3);
  127.         MoveTo(rclose.left + 2, rclose.bottom - 3);
  128.         LineTo(rclose.right - 3, rclose.top + 2);
  129.         MoveTo(rclose.left + 1, (rclose.top + rclose.bottom) div 2);
  130.         Line(rclose.right - rclose.left - 2, 0);
  131.         MoveTo((rclose.right + rclose.left) div 2, rclose.top + 1);
  132.         Line(0, rclose.bottom - rclose.top - 2);
  133.         InsetRect(rclose, 4, 4);
  134.         EraseRect(rclose);
  135.     end;
  136.  
  137.     procedure StdFrameBox (closeBox: Rect; colorFlag: Boolean);
  138.     begin
  139.         if colorFlag then
  140.             begin
  141. {$IFC UNDEFINED THINK_PASCAL}
  142.                 RGBForeColor(BoxShadowColor());
  143.                 RGBBackColor(BoxFillColor());
  144. {$ELSEC}
  145.                 RGBForeColor(BoxShadowColor);
  146.                 RGBBackColor(BoxFillColor);
  147. {$ENDC}
  148.                 EraseRect(closeBox);
  149.                 FrameRect(closeBox);
  150.                 OffsetRect(closeBox, 1, 1);
  151. {$IFC UNDEFINED THINK_PASCAL}
  152.                 RGBForeColor(BoxFrameColor());
  153. {$ELSEC}
  154.                 RGBForeColor(BoxFrameColor);
  155. {$ENDC}
  156.                 FrameRect(closeBox);
  157.             end
  158.         else
  159.             begin
  160.                 FrameRect(closeBox);
  161.                 InsetRect(closeBox, 1, 1);
  162.                 EraseRect(closeBox);
  163.             end;
  164.     end;
  165.  
  166.     procedure StdCloseBox (closeBox: Rect; colorFlag: Boolean);
  167.     begin
  168.         if colorFlag then
  169.             begin
  170.                 InsetRect(closeBox, -1, -1);    { Make an empty frame around it    }
  171. {$IFC UNDEFINED THINK_PASCAL}
  172.                 RGBForeColor(SurroundColor());
  173. {$ELSEC}
  174.                 RGBForeColor(SurroundColor);
  175. {$ENDC}
  176.                 FrameRect(closeBox);
  177.                 InsetRect(closeBox, 1, 1);
  178.  
  179.                 closeBox.right := closeBox.right - 1;
  180.                 closeBox.bottom := closeBox.bottom - 1;
  181.  
  182. {$IFC UNDEFINED THINK_PASCAL}
  183.                 RGBForeColor(BoxShadowColor());
  184.                 RGBBackColor(BoxFillColor());
  185. {$ELSEC}
  186.                 RGBForeColor(BoxShadowColor);
  187.                 RGBBackColor(BoxFillColor);
  188. {$ENDC}
  189.                 EraseRect(closeBox);
  190.                 MoveTo(closeBox.left, closeBox.bottom);
  191.                 LineTo(closeBox.left, closeBox.top);
  192.                 LineTo(closeBox.right, closeBox.top);
  193.                 MoveTo(closeBox.left + 2, closeBox.bottom - 1);
  194.                 LineTo(closeBox.right - 1, closeBox.bottom - 1);
  195.                 LineTo(closeBox.right - 1, closeBox.top + 2);
  196.  
  197.                 OffsetRect(closeBox, 1, 1);
  198. {$IFC UNDEFINED THINK_PASCAL}
  199.                 RGBForeColor(BoxFrameColor());
  200. {$ELSEC}
  201.                 RGBForeColor(BoxFrameColor);
  202. {$ENDC}
  203.                 FrameRect(closeBox);
  204.             end
  205.         else
  206.             begin
  207.                 InsetRect(closeBox, -1, -1);    { Blast a hole in the drag bar        }
  208.                 EraseRect(closeBox);            {   pattern                        }
  209.                 InsetRect(closeBox, 1, 1);
  210.                 FrameRect(closeBox);            { Now draw the close box            }
  211.             end;
  212.     end;
  213.  
  214.     procedure StdZoomBox (closeBox: Rect; colorFlag: Boolean);
  215.     begin
  216.         if colorFlag then
  217.             begin
  218.                 InsetRect(closeBox, -1, -1);    { Make an empty frame around it    }
  219. {$IFC UNDEFINED THINK_PASCAL}
  220.                 RGBForeColor(SurroundColor());
  221. {$ELSEC}
  222.                 RGBForeColor(SurroundColor);
  223. {$ENDC}
  224.                 FrameRect(closeBox);
  225.                 InsetRect(closeBox, 1, 1);
  226.  
  227.                 closeBox.right := closeBox.right - 1;
  228.                 closeBox.bottom := closeBox.bottom - 1;
  229.  
  230. {$IFC UNDEFINED THINK_PASCAL}
  231.                 RGBForeColor(BoxShadowColor());
  232.                 RGBBackColor(BoxFillColor());
  233. {$ELSEC}
  234.                 RGBForeColor(BoxShadowColor);
  235.                 RGBBackColor(BoxFillColor);
  236. {$ENDC}
  237.                 EraseRect(closeBox);
  238.                 MoveTo(closeBox.left, closeBox.bottom);
  239.                 LineTo(closeBox.left, closeBox.top);
  240.                 LineTo(closeBox.right, closeBox.top);
  241.                 MoveTo(closeBox.left + 2, closeBox.bottom - 1);
  242.                 LineTo(closeBox.right - 1, closeBox.bottom - 1);
  243.                 LineTo(closeBox.right - 1, closeBox.top + 2);
  244.  
  245.                 MoveTo(closeBox.left + 2, closeBox.bottom - 1 - 3);
  246.                 LineTo(closeBox.right - 1 - 3, closeBox.bottom - 1 - 3);
  247.                 LineTo(closeBox.right - 1 - 3, closeBox.top + 2);
  248.  
  249.                 OffsetRect(closeBox, 1, 1);
  250. {$IFC UNDEFINED THINK_PASCAL}
  251.                 RGBForeColor(BoxFrameColor());
  252. {$ELSEC}
  253.                 RGBForeColor(BoxFrameColor);
  254. {$ENDC}
  255.                 FrameRect(closeBox);
  256.             end
  257.         else
  258.             begin
  259.                 InsetRect(closeBox, -1, -1);    { Blast a hole in the drag bar        }
  260.                 EraseRect(closeBox);            {   pattern                        }
  261.                 InsetRect(closeBox, 1, 1);
  262.                 FrameRect(closeBox);            { Now draw the close box            }
  263.                 MoveTo(closeBox.left + 1, closeBox.bottom - 1 - 4);
  264.                 LineTo(closeBox.right - 1 - 4, closeBox.bottom - 1 - 4);
  265.                 LineTo(closeBox.right - 1 - 4, closeBox.top + 1);
  266.             end;
  267.     end;
  268.  
  269.     procedure StdDragIcon (where: Point; colorFlag: Boolean);
  270.         var
  271.             tmpRect, smallRect, largeRect: Rect;
  272.  
  273.         procedure FrameBox (box: Rect);
  274.         begin
  275.             FrameRect(box);
  276.             InsetRect(box, 1, 1);
  277.             EraseRect(box);
  278.         end;
  279.  
  280.     begin
  281.         if colorFlag then
  282.             begin
  283.                 SetRect(smallRect, where.h + 2, where.v + 2, where.h + 8, where.v + 8);
  284.                 SetRect(largeRect, smallRect.left + 1, smallRect.top + 1, smallRect.right + 4, smallRect.bottom + 4);
  285.  
  286. {Draw the two boxes on top of each other}
  287.  
  288. {$IFC UNDEFINED THINK_PASCAL}
  289.                 RGBBackColor(BoxFillColor());
  290.                 RGBForeColor(BoxShadowColor());
  291.                 FrameBox(largeRect);
  292.                 OffsetRect(largeRect, 1, 1);
  293.                 RGBForeColor(BoxFrameColor());
  294.  
  295.                 FrameRect(largeRect);
  296.  
  297.                 RGBBackColor(BoxFillColor());
  298.                 RGBForeColor(BoxShadowColor());
  299.                 FrameBox(smallRect);
  300.                 OffsetRect(smallRect, 1, 1);
  301.                 RGBForeColor(BoxFrameColor());
  302. {$ELSEC}
  303.                 RGBBackColor(BoxFillColor);
  304.                 RGBForeColor(BoxShadowColor);
  305.                 FrameBox(largeRect);
  306.                 OffsetRect(largeRect, 1, 1);
  307.                 RGBForeColor(BoxFrameColor);
  308.  
  309.                 FrameRect(largeRect);
  310.  
  311.                 RGBBackColor(BoxFillColor);
  312.                 RGBForeColor(BoxShadowColor);
  313.                 FrameBox(smallRect);
  314.                 OffsetRect(smallRect, 1, 1);
  315.                 RGBForeColor(BoxFrameColor);
  316. {$ENDC}
  317.                 FrameRect(smallRect);
  318.             end
  319.         else
  320.             begin
  321.                 SetRect(smallRect, where.h + 2, where.v + 2, where.h + 9, where.v + 9);
  322.                 SetRect(largeRect, smallRect.left + 2, smallRect.top + 2, smallRect.right + 4, smallRect.bottom + 4);
  323.  
  324.                 FrameBox(largeRect);
  325.                 FrameBox(smallRect);
  326.             end;
  327.  
  328.     end;
  329.  
  330. end.